`timescale 1ns/1ns
module encoder_0(
   input      [9:0]         I_n   ,
   
   output reg [3:0]         Y_n   ,
   output reg               GS
);

always @(*)begin
    casex(I_n)
      10'b1111111111 : begin Y_n = 4'b0000;GS=1'b0;end
      10'b0xxxxxxxxx : begin Y_n = 4'b1001;GS=1'b1;end
      10'b10xxxxxxxx : begin Y_n = 4'b1000;GS=1'b1;end
      10'b110xxxxxxx : begin Y_n = 4'b0111;GS=1'b1;end
      10'b1110xxxxxx : begin Y_n = 4'b0110;GS=1'b1;end
      10'b11110xxxxx : begin Y_n = 4'b0101;GS=1'b1;end
      10'b111110xxxx : begin Y_n = 4'b0100;GS=1'b1;end
      10'b1111110xxx : begin Y_n = 4'b0011;GS=1'b1;end
      10'b11111110xx : begin Y_n = 4'b0010;GS=1'b1;end
      10'b111111110x : begin Y_n = 4'b0001;GS=1'b1;end
      10'b1111111110 : begin Y_n = 4'b0000;GS=1'b1;end 
      default      : begin Y_n = 4'b0000;GS=1'b0;end
   endcase    
end 
     
endmodule

module key_encoder(
      input      [9:0]         S_n   ,         
 
      output wire[3:0]         L     ,
      output wire              GS
);
    encoder_0 encoder_0_t(
	.I_n(S_n),
	.Y_n(L),
	.GS(GS)
	);
endmodule